// 定义一个函数 createCategoryTree，用于将平面的分类数据转换为树形结构
const createCategoryTree = (categories) => {
    // 创建一个对象 categoryMap 用于存储每个分类的节点信息，以分类的 id 作为键
    let categoryMap = {};
    // 创建一个对象 root 用于存储根节点信息，根节点即父节点 pid 为 0 的节点
    let root = {};
    // 遍历分类数据，为每个分类创建一个节点对象，并存储到 categoryMap 中
    categories.forEach((item) => {
      // 创建节点对象，包含分类本身的所有信息和一个空的 children 数组用于存储子节点
      const node = { ...item, children: [] };
      // 将节点对象存储到 categoryMap 中，键为分类的 id
      categoryMap[item.id] = { ...node };
      // 如果当前节点的父节点 id（pid）为 0，说明它是一个根节点，将其存储到 root 对象中
      if (item.pid === 0) {
        root[item.id] = { ...node };
      }
    });
    // console.log(categoryMap);
    // console.log(root);
    // 再次遍历分类数据，将每个节点添加到其父节点的 children 数组中
    categories.forEach((item) => {
      // 如果节点的父节点 id（pid）不为 0，说明它不是根节点
      if (item.pid !== 0) {
        // console.log(item);
        // 通过 pid 从 categoryMap 中找到父节点对象
        const parent = categoryMap[item.pid];
        // console.log(parent);
        // 从 categoryMap 中找到当前节点对象
        const child = { ...categoryMap[item.id] };
        // 将当前节点对象添加到父节点的 children 数组中
        parent?.children.push({ ...child });
      }
    });
    console.log(root);
    // 从 root 对象中提取所有根节点的数组
    let arr = Object.values(root);
    // 返回根节点数组，这个数组构成了分类的树形结构
    return arr;
  };

  export default createCategoryTree